/****   request.ts   ****/
import axios, {AxiosError, AxiosResponse} from 'axios';
import toast from 'react-hot-toast';
// 获取个人信息，主要是token
// import { useSettingStore } from '@/store/user';
// 消息提示组件


// 创建新的axios实例
const service = axios.create({
    // 公共接口
    // baseURL: "http://8.138.152.233:3000",
    // 超时时间 单位是ms，这里设置了5s的超时时间
    timeout: 9000,
    withCredentials: true,
    params: {
        // cookie: localStorage.getItem("cookie")
    }
});

// 添加一个请求拦截器
service.interceptors.request.use(
    (config) => {
        // 发请求前做的一些处理，数据转化，配置请求头，设置token,设置loading等
        // 每次发送请求之前判断pinia中是否存在token,如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
        // const token = useSettingStore.getState().token;
        console.log("加载中...")
        // 数据转换，判断数据格式为form data还是json格式，高版本的axios会默认转换，如果使用的是低版本的需要手动转换
        // json格式
        // config.data = JSON.stringify(config.data);
        return config;
    },
    (error: AxiosError) => {
        toast.error("请求错误，请稍后再试")
        return Promise.reject(error);
    }
);

// 添加一个响应拦截器
service.interceptors.response.use(
    (response: AxiosResponse) => {
        return response.data
        // const {status, data} = response;
        // if (status === 200) {
        //     // 接口网络请求成功，关闭等待提示
        //     return data;
        // } else {
        //     return Promise.reject(data);
        // }
        //
    },
    (error: AxiosError<{ message: string, msg: string }>) => {
        // 响应失败，关闭等待提示
        if (error.response?.data?.message || error.response?.data?.msg) {
            const msg = error.response?.data?.message ? error.response?.data?.message : error.response?.data?.msg
            toast.error(msg?.toString())
        } else {
            if (error.status == 404) {
                toast.error("404 (●'◡'●)")
            } else {
                toast.error("网网 网络好像没有链接呢 (✿◕‿◕✿)")
            }

        }
        return Promise.reject(error);
    }
);

export default service;